package visao;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import modelo.Cliente;
import modelo.Item;
import modelo.Nota;
import modelo.Produto;
import controle.ControleCliente;
import controle.ControleItem;
import controle.ControleNota;
import controle.ControleProduto;
import dao.NotaDAO;

public class Pedido extends JFrame {

	private JPanel contentPane;
	private JTextField txtNome;
	private JTextField txtQtd;
	private JTable table;
	private JComboBox<Cliente> cbbCliente;
	private JComboBox<Produto> cbbProduto;
	private JButton btnAdicionar;
	private JButton btnBuscar;
	private JButton btnConfirmar;
	private JButton btnCancelar;
	private JButton btnFinalizar;
	private JScrollPane scrollPane;
	private JLabel lblSoma;
	private double valorItem;

	private ControleProduto controleProduto;

	private ControleNota controleNota;

	private modelo.Produto produto = new modelo.Produto();

	protected static List<Produto> produtos = new ArrayList<Produto>();

	private Nota nota = new Nota();

	private Item itens = new Item();

	private ItemTableModel tablemodel;

	private Cliente cliente = new Cliente();

	protected static List<Cliente> clientes = new ArrayList<Cliente>();

	private ControleCliente controleCliente;

	private ControleItem controleItem;
	private JButton btnExcluirItem;

	protected void abrirTela() {
		controleCliente = new ControleCliente();

		controleProduto = new ControleProduto();

		controleNota = new ControleNota();

		controleItem = new ControleItem();

	}

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Pedido frame = new Pedido();
					frame.abrirTela();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Pedido() {
		addWindowFocusListener(new WindowFocusListener() {
			public void windowGainedFocus(WindowEvent arg0) {

				try {
					produtos = controleProduto.findAll();
					cbbProduto.removeAllItems();
					for (int i = 0; i < produtos.size(); i++)
						cbbProduto.addItem(produtos.get(i));

				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, "Erro ao listar");
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}

			public void windowLostFocus(WindowEvent arg0) {
			}
		});
		setTitle("PEDIDO");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 599, 531);
		contentPane = new JPanel();
		contentPane.setBackground(Color.BLACK);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JLabel lblNewLabel = new JLabel("Nome Cliente:");
		lblNewLabel.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		lblNewLabel.setForeground(Color.WHITE);
		lblNewLabel.setBounds(10, 11, 81, 18);
		contentPane.add(lblNewLabel);

		txtNome = new JTextField();
		txtNome.setForeground(Color.WHITE);
		txtNome.setBackground(Color.BLACK);
		txtNome.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		txtNome.setBounds(10, 26, 160, 20);
		contentPane.add(txtNome);
		txtNome.setColumns(10);

		btnBuscar = new JButton("Buscar");
		btnBuscar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				cliente.setNome(txtNome.getText());
				try {
					clientes = controleCliente.buscaClientePorNome(cliente);
					cbbCliente.removeAllItems();

					for (int i = 0; i < clientes.size(); i++)
						cbbCliente.addItem(clientes.get(i));

				} catch (Exception ex) {
					JOptionPane.showMessageDialog(null,
							"Erro ao buscar um cliente pelo nome!");
					ex.printStackTrace();
				}

				txtNome.setText(null);

			}
		});
		btnBuscar.setForeground(Color.WHITE);
		btnBuscar.setBackground(new Color(51, 102, 153));
		btnBuscar.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		btnBuscar.setBounds(180, 24, 91, 23);
		contentPane.add(btnBuscar);

		btnConfirmar = new JButton("Confirmar");
		btnConfirmar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				cliente = (Cliente) cbbCliente.getSelectedItem();
				nota.setIdCliente(cliente.getIdCliente());

				btnConfirmar.setEnabled(false);
				cbbCliente.setEnabled(false);

			}
		});
		btnConfirmar.setForeground(Color.WHITE);
		btnConfirmar.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		btnConfirmar.setBackground(new Color(51, 102, 153));
		btnConfirmar.setBounds(491, 24, 91, 23);
		contentPane.add(btnConfirmar);

		cbbCliente = new JComboBox();
		cbbCliente.setForeground(Color.WHITE);
		cbbCliente.setBackground(Color.BLACK);
		cbbCliente.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		cbbCliente.setBounds(281, 25, 200, 22);
		contentPane.add(cbbCliente);

		JSeparator separator = new JSeparator();
		separator.setBounds(10, 68, 572, 2);
		contentPane.add(separator);

		JLabel lblNewLabel_1 = new JLabel("Selecione um produto:");
		lblNewLabel_1.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		lblNewLabel_1.setForeground(Color.WHITE);
		lblNewLabel_1.setBounds(10, 81, 126, 18);
		contentPane.add(lblNewLabel_1);

		cbbProduto = new JComboBox<Produto>();
		cbbProduto.setForeground(Color.WHITE);
		cbbProduto.setBackground(Color.BLACK);
		cbbProduto.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		cbbProduto.setBounds(10, 110, 364, 22);
		contentPane.add(cbbProduto);

		txtQtd = new JTextField();
		txtQtd.setForeground(Color.WHITE);
		txtQtd.setBackground(Color.BLACK);
		txtQtd.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		txtQtd.setBounds(395, 110, 86, 20);
		contentPane.add(txtQtd);
		txtQtd.setColumns(10);

		JLabel lblNewLabel_2 = new JLabel("Quantidade:");
		lblNewLabel_2.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		lblNewLabel_2.setForeground(Color.WHITE);
		lblNewLabel_2.setBounds(398, 80, 72, 18);
		contentPane.add(lblNewLabel_2);

		btnAdicionar = new JButton("Adicionar");
		btnAdicionar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				produto = (modelo.Produto) cbbProduto.getSelectedItem();
				nota.setIdProduto(produto.getIdProduto());

				Item item = new Item();

				item.setProduto(produto);
				item.setQtd(Integer.valueOf(txtQtd.getText()));
				controleItem.calculaTotal(item);

				tablemodel.addItens(item);

				nota.addItem(item);
				lblSoma.setText(String.valueOf(controleNota.calculaTotal(nota)));

				txtQtd.setText(null);

			}
		});
		btnAdicionar.setForeground(Color.WHITE);
		btnAdicionar.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		btnAdicionar.setBackground(new Color(51, 102, 153));
		btnAdicionar.setBounds(491, 109, 91, 23);
		contentPane.add(btnAdicionar);

		JSeparator separator_1 = new JSeparator();
		separator_1.setBounds(10, 143, 572, 2);
		contentPane.add(separator_1);

		JLabel lblNewLabel_3 = new JLabel("Itens:");
		lblNewLabel_3.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		lblNewLabel_3.setForeground(Color.WHITE);
		lblNewLabel_3.setBounds(10, 153, 46, 14);
		contentPane.add(lblNewLabel_3);

		btnFinalizar = new JButton("Finalizar Pedido");
		btnFinalizar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				nota.setDataNota(new Date());
				controleNota.inserirNota(nota);

				JOptionPane.showMessageDialog(null, "Nota fiscal cadastrada");

				lblSoma.setText(null);
				btnConfirmar.setEnabled(true);
				cbbCliente.setEnabled(true);
				cbbCliente.removeAllItems();
				tablemodel.limpar();
				dispose();

			}
		});
		btnFinalizar.setForeground(Color.WHITE);
		btnFinalizar.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		btnFinalizar.setBackground(new Color(51, 102, 153));
		btnFinalizar.setBounds(10, 470, 144, 23);
		contentPane.add(btnFinalizar);

		btnCancelar = new JButton("Cancelar Pedido");
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				lblSoma.setText(null);
				btnConfirmar.setEnabled(true);
				cbbCliente.setEnabled(true);
				cbbCliente.removeAllItems();
				tablemodel.limpar();
				dispose();

			}
		});
		btnCancelar.setForeground(Color.WHITE);
		btnCancelar.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		btnCancelar.setBackground(new Color(51, 102, 153));
		btnCancelar.setBounds(438, 470, 144, 23);
		contentPane.add(btnCancelar);

		scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 170, 572, 223);
		contentPane.add(scrollPane);

		tablemodel = new ItemTableModel();

		table = new JTable(tablemodel);
		table.setForeground(Color.BLACK);
		table.setBackground(Color.WHITE);
		table.setFont(new Font("Comic Sans MS", Font.BOLD, 11));
		scrollPane.setViewportView(table);

		JLabel lblNewLabel_4 = new JLabel("Total:");
		lblNewLabel_4.setForeground(Color.WHITE);
		lblNewLabel_4.setFont(new Font("Comic Sans MS", Font.BOLD, 14));
		lblNewLabel_4.setBounds(10, 438, 55, 21);
		contentPane.add(lblNewLabel_4);

		lblSoma = new JLabel("");
		lblSoma.setFont(new Font("Comic Sans MS", Font.BOLD, 14));
		lblSoma.setForeground(Color.RED);
		lblSoma.setBounds(491, 445, 91, 14);
		contentPane.add(lblSoma);

		btnExcluirItem = new JButton("Excluir Item");
		btnExcluirItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				int resposta = JOptionPane.showConfirmDialog(null,
						"Deseja excluir esse item da nota?");

				if (resposta == 0) {

					try {
						
						valorItem = (double) tablemodel.getValueAt(
								table.getSelectedRow(), 3);

						itens = (Item) tablemodel.getItens(table
								.getSelectedRow());

						controleItem.deletarItem(itens);

						tablemodel.removeItens(table.getSelectedRow());

						nota.removeItem(itens);
						
						controleNota.calculaTotal(nota);

						lblSoma.setText(String.valueOf(nota.getTotal()));

					} catch (Exception ex) {
						JOptionPane.showMessageDialog(null,
								"Erro ao deletar um item!");
						ex.printStackTrace();
					}
				}

				if (resposta == 1) {

				}

			}
		});
		btnExcluirItem.setForeground(Color.WHITE);
		btnExcluirItem.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
		btnExcluirItem.setBackground(new Color(51, 102, 153));
		btnExcluirItem.setBounds(10, 404, 144, 23);
		contentPane.add(btnExcluirItem);
	}
}
